home *** CD-ROM | disk | FTP | other *** search
/ Apple II Magazines (DO) / Softdisk Magazette Volume 2, No. 07 (1983-03)(Softdisk)(Side B).zip / Softdisk Magazette Volume 2, No. 07 (1983-03)(Softdisk)(Side B).do / TIC.TAC.TOE.bas < prev    next >
BASIC Source File  |  1996-12-24  |  10KB  |  140 lines

  1. 10  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>-----------<CTRL-M>TIC-TAC-TOE<CTRL-M>-----------<CTRL-M>
  2. 20  REM   POKE <UNKNOWN TOKEN> PLOT 0<CTRL-C> HLIN 1<CTRL-C> CALL 2<CTRL-C> ASC DEF  = <CTRL-B> ASC POKE   POKE <UNKNOWN TOKEN> PLOT 3<CTRL-C> HLIN 5<CTRL-C> CALL 6<CTRL-C> IF 0<CTRL-C> PLOT 4<CTRL-C> IF 0<CTRL-C> RESTORE 1<CTRL-C> RUN 2<CTRL-C> <CTRL-Q><UNKNOWN TOKEN> IF 5<CTRL-C> RESTORE 6<CTRL-C> RUN 4<CTRL-C> :<UNKNOWN TOKEN><UNKNOWN TOKEN>0<CTRL-C><UNKNOWN TOKEN>4<CTRL-C> IF 0<CTRL-C>  AND 3<CTRL-C> HGR2  SQR`.................................................<CTRL-M><CTRL-M><CTRL-M>CUTE, EH?<CTRL-M><CTRL-M>
  3. 21  REM  SPEED= <CTRL-A> DEL &  NOT & SPEED=   DEL ' COLOR= <CTRL-A> GR  SPEED= <UNKNOWN TOKEN>8<UNKNOWN TOKEN>& HGR & ASC& = <UNKNOWN TOKEN> ASC' ONERR ' -@ HGR2 <UNKNOWN TOKEN>`................................................................<CTRL-M><CTRL-M>HERE'S MORE!<CTRL-M><CTRL-M>
  4. 30  POKE 1014,56: POKE 1015,8: POKE 1013,76
  5. 35  ONERR  GOTO 1700
  6. 40  TEXT : HOME : INVERSE : POKE 48,32: GOSUB 1000: SPEED= 255
  7. 45  POKE 48,160: HLIN 1,38 AT 2: HLIN 1,38 AT 3: HLIN 1,38 AT 45: HLIN 1,38 AT 44: VLIN 2,45 AT 1: VLIN 2,45 AT 38
  8. 50 A$ = "TIC - TAC - TOE": GOSUB 1400: VTAB 3: PRINT :A$ = "BY T.M.H. ENTERPRISES": GOSUB 1400: VTAB 8: PRINT 
  9. 55  HLIN 4,35 AT 10: HLIN 4,35 AT 11: HLIN 4,35 AT 36: HLIN 4,35 AT 37: VLIN 10,37 AT 4: VLIN 10,37 AT 35
  10. 60 A$ = "INSTRUCTIONS? " + CHR$(91) +" ]": HTAB 10: VTAB 12: GOSUB 1300:A$ = "YN": SPEED= 30: HTAB 25: GOSUB 1100:AN$ =  CHR$( PEEK( -16384) -128): POKE  -16368,0: SPEED= 255
  11. 65  NORMAL 
  12. 70  IF AN$ = "N"  THEN 200
  13. 72  IF AN$ < >"Y"  THEN  PRINT : INVERSE : GOTO 60
  14. 75  GOSUB 1500:A$ = "TIC - TAC - TOE": GOSUB 1400: PRINT :A$ = "---------------": GOSUB 1400
  15. 76  PRINT 
  16. 80  PRINT : PRINT :A$ = "  THIS IS THE FAMOUS GAME OF TIC-TAC-   TOE, ADAPTED FOR THE APPLE ]" + CHR$(91) +" COMPUTER.": GOSUB 1200: PRINT : PRINT 
  17. 82 A$ = "YOU CAN PLAY THE COMPUTER OR YOU CAN    PLAY ANOTHER INEFFECTIVE HUMAN.         **WARNING**, IF YOU DECIDE TO PLAY ME,  THE BEST YOU CAN DO IS TIE.  YOU WILL   NEVER BEAT ME.": GOSUB 1200
  18. 84  PRINT :A$ = "-----": GOSUB 1200: PRINT : PRINT 
  19. 90 A$ = "TO PLACE YOUR MOVE, YOU NEED TO GIVE AN X COORDINATE AND A Y COORDINATE, EACH   FROM 1 TO 3.": GOSUB 1200
  20. 115  PRINT : PRINT : PRINT :A$ = "HIT A KEY TO START " + CHR$(91) +" ]": GOSUB 1400
  21. 120 A$ = "/-\!": SPEED= 100: HTAB 30: GOSUB 1100: SPEED= 255: POKE  -16368,0
  22. 200  GOSUB 1500: CLEAR : LOMEM: 16384
  23. 205  HGR :CA = 2248: GOSUB 1900
  24. 210  DIM PO(2,2,1): FOR I = 0 TO 2: FOR J = 0 TO 2:PO(I,J,0) = 69 +I *47 +I:PO(I,J,1) = 15 +48 *J: NEXT : NEXT : DIM PI(2,2)
  25. 215  INVERSE :A$ = "            TIC - TAC - TOE             ": VTAB 21: GOSUB 1300: POKE 34,21
  26. 216  NORMAL :A$ = "DO YOU WANT TO PLAY ME OR SOME USELESS  HUMAN?": GOSUB 1200: GET A$: IF A$ < >"H"  AND A$ < >"M"  AND A$ < >"Y"  THEN  HOME : GOTO 216
  27. 217  IF A$ < >"H"  THEN 220
  28. 218 PL = 1:A$ = "PLAYER ONE IS X AND GOES FIRST, PLAYER  TWO IS O AND GOES AFTER.  DECIDE WHO IS WHO.": PRINT : GOSUB 1200: FOR I = 1 TO 1500: NEXT : HOME : GOTO 300
  29. 220  VTAB 24: HTAB 1: NORMAL :A$ = "WOULD YOU LIKE HEADS OR TAILS ( )?": GOSUB 1300: PRINT  CHR$(8) CHR$(8) CHR$(8);:A$ = "H  T  ": SPEED= 150: GOSUB 1100: HOME : SPEED= 255
  30. 222  GET C$: IF C$ < >"H"  AND C$ < >"T"  THEN 220
  31. 223  IF C$ = "H"  THEN C$ = "HEADS"
  32. 224  IF C$ = "T"  THEN C$ = "TAILS"
  33. 226 A$ = "OKAY, YOU WANT " +C$: GOSUB 1200: PRINT 
  34. 230  FOR I = 1 TO 30 + RND(1) *40: IF  RND(1) <.5  THEN  PRINT "HEADS": GOTO 240
  35. 235  PRINT "TAILS"
  36. 240  VTAB  PEEK(37): FOR K = 1 TO 5:P =  PEEK( -16336): NEXT : NEXT 
  37. 250  IF  RND(0) <.5  THEN D$ = "HEADS": GOTO 255
  38. 252 D$ = "TAILS"
  39. 255  VTAB 22: CALL  -868: IF D$ < >C$  THEN A$ = "I GO FIRST.": GOSUB 1300: FOR I = 1 TO 500: NEXT : GOTO 400
  40. 260 A$ = "YOU GO FIRST.": GOSUB 1300: FOR I = 1 TO 500: NEXT 
  41. 300  GOSUB 2100: HOME : IF PL  THEN  VTAB 24: PRINT "   PLAYER # "PL;
  42. 302 B$ = "/-\!": VTAB 22: CALL  -868: HTAB 1:A$ = "X COORDINATE IS " + CHR$(91) +" ]": GOSUB 1300: PRINT  CHR$(8) CHR$(8);:A$ = B$: GOSUB 1100: GET A$: PRINT A$: IF A$ <"1"  OR A$ >"3"  THEN 302
  43. 305 CX =  VAL(A$) -1
  44. 310  VTAB 23: HTAB 1: CALL  -868:A$ = "Y COORDINATE IS " + CHR$(91) +" ]": GOSUB 1300: PRINT  CHR$(8) CHR$(8);:A$ = B$: GOSUB 1100: GET A$: PRINT A$: IF A$ <"1"  OR A$ >"3"  THEN 310
  45. 315 CY =  VAL(A$) -1: IF PI(CX,CY)  THEN 302
  46. 320  IF PL  THEN PI(CX,CY) = PL -3 *(PL = 2): GOTO 330
  47. 325 PI(CX,CY) = 1
  48. 330 MO = MO +1: HCOLOR= 5:X = PO(CX,CY,0):Y = PO(CX,CY,1): IF PL = 2  THEN  GOSUB 1650: GOTO 340
  49. 335  GOSUB 1600
  50. 340  IF PL  THEN PL = PL +1 -2 *(PL = 2): GOSUB 2100: GOTO 300
  51. 350  IF MO = 2  THEN SX = CX:SY = CY
  52. 355  IF MO = 1  THEN FX = CX:FY = CY
  53. 360  IF MO = 4  THEN TX = CX:TY = CY
  54. 400 MO = MO +1: GOSUB 2100: FOR I = 0 TO 7: IF AR(I) =  -2  THEN 410
  55. 401  NEXT : FOR I = 0 TO 7: IF AR(I) = 2  THEN 410
  56. 405  NEXT : GOTO 430
  57. 410 K = I: IF K >2  THEN 415
  58. 411  FOR I = 0 TO 2: IF PI(I,K) = 0  THEN CX = I:CY = K: GOTO 490
  59. 412  NEXT : STOP 
  60. 415  IF K >5  THEN 420
  61. 416  FOR I = 0 TO 2: IF PI(K -3,I) = 0  THEN CX = K -3:CY = I: GOTO 490
  62. 418  NEXT : STOP 
  63. 420  IF K = 7  THEN 425
  64. 421  IF PI(0,2) = 0  THEN CX = 0:CY = 2: GOTO 490
  65. 422  IF PI(1,1) = 0  THEN CX = 1:CY = 1: GOTO 490
  66. 423 CX = 2:CY = 0: GOTO 490
  67. 425  IF PI(0,0) = 0  THEN CX = 0:CY = 0: GOTO 490
  68. 426  IF PI(1,1) = 0  THEN CX = 1:CY = 1: GOTO 490
  69. 427 CX = 2:CY = 2: GOTO 490
  70. 430  IF PI(1,1) = 0  THEN CX = 1:CY = 1: GOTO 490
  71. 431  IF MO = 2  THEN CX = 0:CY = 2: GOTO 490
  72. 432  IF MO = 4  AND (FX = 2  OR FX = 0)  AND (FY = 2  OR FY = 0)  THEN CX = 0:CY = 1: GOTO 490
  73. 433  IF MO = 4  AND PI(0,0) = 0  THEN CX = 0:CY = 0: GOTO 490
  74. 434  IF MO = 4  AND PI(2,2) = 0  THEN CX = 2:CY = 2: GOTO 490
  75. 437  IF MO < >3  THEN 450
  76. 439  IF (SX = 0  AND SY = 1)  OR (SX = 1  AND SY = 2)  THEN CX = 0:CY = 2: GOTO 490
  77. 440  IF (SX = 1  AND SY = 0)  OR (SX = 2  AND SY = 1)  THEN CX = 2:CY = 0: GOTO 490
  78. 442 CX = 2 -SX:CY = 2 -SY: GOTO 490
  79. 450  IF MO < >5  THEN 489
  80. 452  IF (SX = 2  OR SX = 0)  AND (SY = 2  OR SY = 0)  THEN 455
  81. 453  GOTO 470
  82. 455  IF SX < >TX  THEN 460
  83. 456 CX = TX: FOR I = 0 TO 2: IF PI(CX,I) = 0  THEN CY = I: GOTO 490
  84. 457  NEXT : STOP 
  85. 460 CY = TY: FOR I = 0 TO 2: IF PI(I,CY) = 0  THEN CX = I: GOTO 490
  86. 465  NEXT : STOP 
  87. 470  IF SX = 0  AND SY = 1  THEN CX = 1:CY = 2: GOTO 490
  88. 475  IF SX = 1  AND SY = 2  THEN CX = 0:CY = 1: GOTO 490
  89. 480  IF SX = 2  AND SY = 1  THEN CX = 1:CY = 0: GOTO 490
  90. 485  IF SX = 1  AND SY = 0  THEN CX = 2:CY = 1: GOTO 490
  91. 489 CX =  INT( RND(1) *3):CY =  INT( RND(1) *3): IF PI(CX,CY)  THEN 489
  92. 490  HCOLOR= 5:PI(CX,CY) =  -1:X = PO(CX,CY,0):Y = PO(CX,CY,1): GOSUB 1650: GOTO 300
  93. 999  END 
  94. 1000  FOR I = 0 TO 39: VLIN 0,47 AT I: NEXT : RETURN 
  95. 1100 I1 =  PEEK(37) +1:I2 =  PEEK(36) +1
  96. 1105  FOR I = 1 TO  LEN(A$): VTAB I1: HTAB I2: PRINT  MID$ (A$,I,1);: IF  PEEK( -16384) >128  THEN 1115
  97. 1110  NEXT : IF  PEEK( -16384) <128  THEN 1105
  98. 1115  FOR I = 1 TO 1: NEXT : VTAB I1: HTAB I2: RETURN 
  99. 1200  FOR I = 1 TO  LEN(A$): INVERSE : PRINT " ";: NORMAL : PRINT  CHR$(8) MID$ (A$,I,1);: NEXT 
  100. 1205  RETURN 
  101. 1300  POKE 810,160: POKE 811,19: POKE 812,32: POKE 813,228: POKE 814,251: POKE 815,96
  102. 1305  FOR I = 1 TO  LEN(A$):I1$ =  MID$ (A$,I,1): IF I1$ < >" "  THEN  CALL 810
  103. 1310  PRINT I1$;: IF I1$ = "."  OR I1$ = "?"  OR I1$ = "!"  THEN  FOR I1 = 1 TO 120: NEXT 
  104. 1315  NEXT 
  105. 1320  RETURN 
  106. 1400 A$ =  LEFT$(A$,40):I2 =  PEEK(37) +1: IF  LEN(A$)/2 < > INT( LEN(A$)/2)  THEN A$ = A$ +" "
  107. 1405  FOR I = 1 TO  LEN(A$)/2: VTAB I2: HTAB 21 -I: PRINT  LEFT$(A$,I) RIGHT$(A$,I);: NEXT 
  108. 1410  RETURN 
  109. 1500  VTAB 24: FOR I = 1 TO 24: PRINT :P =  PEEK( -16336) + PEEK( -16336): NEXT : HOME : RETURN 
  110. 1600  FOR I = 0 TO 8: HPLOT X,Y +I TO X +38,Y +29 +I: HPLOT X,Y +29 +I TO X +38,Y +I: NEXT : RETURN 
  111. 1650  & X +8,Y,X +30,Y +9: & X +8,Y +30,X +30,Y +38: & X,Y +8,X +8,Y +30: & X +30,Y +8,X +38,Y +30: RETURN 
  112. 1700  POKE 216,0: TEXT : HOME : NORMAL : SPEED= 255: END 
  113. 1800  HCOLOR= 6
  114. 1850  IF I < >0  AND I < >3  AND I < >7  THEN  & 68,14,107,53
  115. 1851  IF I < >0  AND I < >4  THEN  & 117,14,155,53
  116. 1852  IF I < >0  AND I < >5  AND I < >6  THEN  & 165,14,203,53
  117. 1853  IF I < >1  AND I < >3  THEN  & 68,63,107,101
  118. 1854  IF I < >1  AND I < >4  AND I < >6  AND I < >7  THEN  & 117,63,155,101
  119. 1855  IF I < >1  AND I < >5  THEN  & 165,63,203,101
  120. 1856  IF I < >2  AND I < >3  AND I < >6  THEN  & 68,111,107,149
  121. 1857  IF I < >2  AND I < >4  THEN  & 117,111,155,149
  122. 1858  IF I < >2  AND I < >5  AND I < >7  THEN  & 165,111,203,149
  123. 1860  RETURN 
  124. 1900  HCOLOR= 7: & 63,9,205,14: & 63,149,205,154: & 63,9,68,154: & 204,9,209,154: HCOLOR= 6: & 68,53,203,63: & 68,101,203,111: & 107,14,116,149: & 155,14,165,149: RETURN 
  125. 2000  FOR I = 0 TO 7:AR(I) = 0: NEXT :AR(6) = PI(2,0) +PI(1,1) +PI(0,2):AR(7) = PI(0,0) +PI(1,1) +PI(2,2)
  126. 2010  FOR J = 0 TO 2: FOR K = 0 TO 2:AR(J) = PI(K,J) +AR(J): NEXT : NEXT : FOR J = 0 TO 2: FOR K = 0 TO 2:AR(J +3) = PI(J,K) +AR(J +3): NEXT : NEXT : RETURN 
  127. 2100  GOSUB 2000: FOR I = 0 TO 7: IF AR(I) =  -3  OR AR(I) = 3  THEN 2120
  128. 2110  NEXT 
  129. 2115  FOR K = 0 TO 2: FOR J = 0 TO 2: IF PI(K,J) = 0  THEN  RETURN 
  130. 2116  NEXT : NEXT : POP :A$ = "A STALEMATE!": HOME : GOSUB 1300: GOTO 2150
  131. 2120  POP : HOME : GOSUB 1800: FOR J = 1 TO 20: CALL CA: NEXT 
  132. 2125  IF PL  AND AR(I) = 3  THEN A$ = "PLAYER ONE HAS WON!": GOSUB 1300: GOTO 2150
  133. 2130  IF PL  AND AR(I) =  -3  THEN A$ = "PLAYER TWO HAS WON!": GOSUB 1300: GOTO 2150
  134. 2135  IF AR(I) = 3  THEN A$ = "THE HUMAN WON??!!  IMPOSSIBLE!": GOSUB 1300: GOTO 2150
  135. 2140  IF AR(I) =  -3  THEN A$ = "THE COMPUTER WON, OF COURSE!": GOSUB 1300: GOTO 2150
  136. 2150  PRINT : PRINT "THIS GAME IS OVER, PLAY AGAIN?";: GET A$: IF A$ < >"Y"  AND A$ < >"N"  THEN  VTAB  PEEK(37): GOTO 2150
  137. 2160  IF A$ = "N"  THEN 1700
  138. 2170  GOTO 200
  139. 63998  REM <CTRL-M>BY CHRIS KOERITZ<CTRL-M>RT. 5, BOX 331B<CTRL-M>CHARLOTTESVILLE, VA 22901<CTRL-M>WRITE IF YOU HAVE PROBLEMS<CTRL-M>
  140. 63999  REM <CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H><CTRL-H>======<CTRL-M>BY TMH ---<CTRL-M>======<CTRL-M>